package LPresentacion;

import java.awt.BorderLayout;
import java.awt.Dimension;
import java.awt.FlowLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.util.ArrayList;
import java.util.Comparator;
import java.util.HashMap;
import java.util.Iterator;
import java.util.TreeMap;
import java.util.TreeSet;

import javax.swing.JButton;
import javax.swing.JInternalFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.JScrollPane;
import javax.swing.JTable;
import javax.swing.table.AbstractTableModel;

import LNegocio.GestorBibliotecario;
import LNegocio.Libro;
import LNegocio.OpinionLibro;
import LNegocio.RelacionLibroLocalizacion;
import LPresentacion.VerLocalizacionLibro.tablaLibroLocal;

public class MostrarTopPuntuaciones extends JInternalFrame implements ActionListener
{
JPanel jptabla;
	
	JTable tbTop;
	
	private JButton botonAceptar;
	private JScrollPane scrollPane; 
	private JPanel botones;
	
	GestorBibliotecario gb;
	
	public MostrarTopPuntuaciones (GestorBibliotecario gb)
	{
		super("Top", true, true, true, true); 
        this.gb = gb;
        setVisible(true);
        setSize(250, 250);
                
    	inicializarSubComponentes();
		cargarFormulario();      
	}
	
	public void inicializarSubComponentes()
    {    	
    	try
		{
			scrollPane= new JScrollPane(tbTop);
			JLabel aviso = new JLabel ("Click en los titulos de la tabla para ordenar");
			this.getContentPane().setLayout(new BorderLayout());
	        this.getContentPane().add(scrollPane,"Center");
	        this.getContentPane().add(aviso,"North");
	        
	        botonAceptar=new JButton("Aceptar");
			botonAceptar.addActionListener(this);
			
			botones=new JPanel();
			botones.setLayout(new FlowLayout());
			botones.add(botonAceptar);

			
			this.getContentPane().add(botones,"South");
		}
		catch(Exception e)
		{
			System.out.println("Error en la carga del formulario");
		}
    }
	public boolean cargarFormulario() 
    {
    	
    	boolean resultado = true;
		
    	crearTablaTop();
		
		this.setLocation(200,200);
		this.setVisible(true);
		inicializarSubComponentes();
	
		return resultado;
    }
	public void crearTablaTop()
    {
		tbTop=null;
		tablaTop tll = new tablaTop(getLibrosOrdenados());
		tbTop = new JTable(tll);
		tbTop.setPreferredScrollableViewportSize(new Dimension(500, 70));
		tbTop.setFillsViewportHeight(true);
		tbTop.setEnabled(true);
		tbTop.setRowSelectionAllowed(true);
		tbTop.setAutoCreateRowSorter(true);
		tll.fireTableDataChanged();
    }
	private TreeSet<Libro> getLibrosOrdenados()
	{
		HashMap<String,Libro> libros = gb.getLibros();
		TreeSet<Libro> sSet=new TreeSet<Libro> (new ComparadorMedia());
		sSet.addAll(libros.values());
		//TreeMap<String,Libro> sSet=new TreeMap<String,Libro> (new ComparadorMedia());
		//sSet.putAll(libros);
		return sSet;
	}
	
	class ComparadorMedia implements Comparator<Libro>
	{
		public int compare(Libro one, Libro two) 
		{
			
			Double a = one.getPuntMedia();
			Double b = two.getPuntMedia();
			
			return b.compareTo(a);
		}
	} 
	class tablaTop extends AbstractTableModel
    {
 		String[] columnNames = {"Titulo", "Media"};
        Object[][] data;
        
        public tablaTop(TreeSet<Libro> libros)
        {
        	super();
        	int i = 0;
        	int filas = libros.size();
    		data = new Object[filas][];
    		for(Libro c: libros)
    		{	
    			System.out.println(c.getPuntMedia());
    			System.out.println(c.getNumPuntuaciones());

	    		Object[] a = 
	    		{
	    				new String (c.getTitulo()),
	    				new String (Double.toString(c.getPuntMedia())),
    			};
    			data[i] = a;
    			i++;
    		}
        }
        
       public int getColumnCount() 
        {
            return columnNames.length;
        }

        public int getRowCount() 
        {
            return data.length;
        }

        public String getColumnName(int col) 
        {
            return columnNames[col];
        }

        public Object getValueAt(int row, int col) 
        {
            return data[row][col];
        }       
    }
	
	public void actionPerformed(ActionEvent e)
	{	
		if (e.getSource() instanceof JButton) 
		{
			JButton btnPulsado = (JButton)e.getSource();

			if (btnPulsado == botonAceptar) 
			{
				dispose();
			}
		}
	}
}
